home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2011 November
/
CHIP_2011_11.iso
/
Programy
/
Inne
/
Gry
/
Carnage_Contest
/
scripts
/
CC Original
/
weapons
/
Dolphin.lua
< prev
next >
Wrap
Text File
|
2009-12-13
|
4KB
|
134 lines
--------------------------------------------------------------------------------
-- Weapon Dolphin + Projectile Dolphin
-- Original Carnage Contest Weapon
-- Script by DC, December 2009, www.UnrealSoftware.de
--------------------------------------------------------------------------------
-- Setup Tables
if cc==nil then cc={} end
cc.dolphin={}
cc.dolphin.dolphin={}
-- Load & Prepare Ressources
cc.dolphin.gfx_wpn=loadgfx("weapons/dolphin.bmp") -- Weapon Image
setmidhandle(cc.dolphin.gfx_wpn)
cc.dolphin.sfx_attack=loadsfx("dolphin.ogg") -- Attack Sound
--------------------------------------------------------------------------------
-- Weapon: Dolphin
--------------------------------------------------------------------------------
cc.dolphin.id=addweapon("cc.dolphin","Flopper The Dolphin",cc.dolphin.gfx_wpn,0,2) -- Add Weapon (0 uses, first in round 2)
function cc.dolphin.draw() -- Draw
-- HUD Positioning
if weapon_shots==0 then
hudpositioning(pos_invisible)
hudinfo("Click to define Flopper's target position!")
end
end
function cc.dolphin.attack(attack) -- Attack
if (weapon_shots<=0) and (weapon_position==1) then
-- No more weapon switching!
useweapon(0)
playsound(cc.dolphin.sfx_attack)
playsound(sfx_hitwater4)
weapon_shots=weapon_shots+1
-- Find closest player (to determine dolphin jump direction)
closest=10000
setdir=1
players=playertable()
for i=1,#players,1 do
if getplayerhealth(players[i])>0 then
dist=math.sqrt((weapon_x-getplayerx(players[i]))^2 + (weapon_y-getplayery(players[i]))^2)
if dist<closest then
closest=dist
if getplayerx(players[i])>weapon_x then
setdir=1
else
setdir=-1
end
end
end
end
-- Create Dolphin
pid=createprojectile(cc.dolphin.dolphin.id)
projectiles[pid]={}
if (setdir==1) then
projectiles[pid].dir=1
projectiles[pid].sinus=0
else
projectiles[pid].dir=-1
projectiles[pid].sinus=180
end
projectiles[pid].x=weapon_x-90
projectiles[pid].y=getwatery()+30
projectiles[pid].amplitude=(getwatery()+30)-weapon_y
if (projectiles[pid].amplitude)<100 then
projectiles[pid].amplitude=100
end
if projectiles[pid].amplitude>getmapheight()+50 then
projectiles[pid].amplitude=getmapheight()+50
end
projectiles[pid].speed=500.0/projectiles[pid].amplitude
projectiles[pid].tx=projectiles[pid].x+projectiles[pid].sinus
projectiles[pid].ty=projectiles[pid].y
particle(p_waterhit,projectiles[pid].tx,getwatery()-30)
-- End Turn
endturn()
end
end
--------------------------------------------------------------------------------
-- Projectile: Dolphin
--------------------------------------------------------------------------------
cc.dolphin.dolphin.id=addprojectile("cc.dolphin.dolphin") -- Add Projectile
function cc.dolphin.dolphin.draw(id) -- Draw
-- Setup draw mode
setblend(blend_alpha)
setalpha(1)
setcolor(255,255,255)
-- Calculate projectile rotation
if projectiles[id].dir==1 then
setscale(1,1)
setrotation(projectiles[pid].sinus)
else
setscale(-1,1)
setrotation(projectiles[pid].sinus-180)
end
-- Draw projectile
drawimage(cc.dolphin.gfx_wpn,projectiles[id].tx,projectiles[id].ty)
end
function cc.dolphin.dolphin.update(id) -- Update
-- Calculate new position
projectiles[id].sinus=projectiles[id].sinus+projectiles[id].dir*projectiles[pid].speed -- Change Sinus
projectiles[id].tx=projectiles[id].x+projectiles[id].sinus -- New X (root + sinus)
projectiles[id].ty=projectiles[id].y-math.sin(math.rad(projectiles[id].sinus))*projectiles[id].amplitude -- New Y (root + sin(sinus)*amplitude)
-- Push all close players
players=playertable()
for i=1,#players,1 do
if getplayerhealth(players[i])>0 then
if math.sqrt((projectiles[id].tx-getplayerx(players[i]))^2 + (projectiles[id].ty-getplayery(players[i]))^2)<50 then
playerpush(players[i],projectiles[id].dir*3,-3,1,1)
end
end
end
-- Free projectile?
free=0
if (projectiles[id].dir>0) then
if (projectiles[id].sinus>180) then free=1 end
else
if (projectiles[id].sinus<0) then free=1 end
end
if (free==1) then
freeprojectile(id)
playsound(sfx_hitwater2)
particle(p_waterhit,projectiles[id].tx,getwatery()-30)
end
-- Scroll to projectile
scroll(projectiles[id].tx,projectiles[id].ty)
end